home *** CD-ROM | disk | FTP | other *** search
- unit ComponentDataLink;
-
- interface
-
- uses
- DB, DBTables, BDE, Classes;
-
- type
- TComponentDataLink = class(TDataLink)
- private
- fComponent: TComponent;
- fDataSet: TDataSet;
- fDataSetName: string;
- fIndexNames: string;
- fOnNewDataSet: TDataSetNotifyEvent;
- fOnDataSetOpen: TDataSetNotifyEvent;
- fOnDataSetChange: TDataSetNotifyEvent;
- fOnIndexChange: TDataSetNotifyEvent;
- fOnLayoutChange: TDataSetNotifyEvent;
- fOnPostData: TDataSetNotifyEvent;
- fOnDataSetClose: TDataSetNotifyEvent;
- fOnInvalidDataSet: TDataSetNotifyEvent;
- fOnInvalidDataSource: TDataSetNotifyEvent;
- fOnDestroyDataLink: TDataSetNotifyEvent;
- protected
- function GetDataSetName: string; virtual;
- procedure SetDataSetName(Value: string); virtual;
- procedure ActiveChanged; override;
- procedure CheckBrowseMode; override;
- procedure DataSetChanged; override;
- procedure DataSetScrolled(Distance: Integer); override;
- procedure FocusControl(Field: TFieldRef); override;
- procedure EditingChanged; override;
- procedure LayoutChanged; override;
- procedure RecordChanged(Field: TField); override;
- procedure UpdateData; override;
- public
- constructor Create(AComponent: TComponent); virtual;
- destructor Destroy; override;
- property DataSetName: string
- read GetDataSetName
- write SetDataSetName;
- property OnNewDataSet: TDataSetNotifyEvent
- read fOnNewDataSet
- write fOnNewDataSet;
- property OnDataSetOpen: TDataSetNotifyEvent
- read fOnDataSetOpen
- write fOnDataSetOpen;
- property OnDataSetChange: TDataSetNotifyEvent
- read fOnDataSetChange
- write fOnDataSetChange;
- property OnIndexChange: TDataSetNotifyEvent
- read fOnIndexChange
- write fOnIndexChange;
- property OnLayoutChange: TDataSetNotifyEvent
- read fOnLayoutChange
- write fOnLayoutChange;
- property OnPostData: TDataSetNotifyEvent
- read fOnPostData
- write fOnPostData;
- property OnDataSetClose: TDataSetNotifyEvent
- read fOnDataSetClose
- write fOnDataSetClose;
- property OnInvalidDataSet: TDataSetNotifyEvent
- read fOnInvalidDataSet
- write fOnInvalidDataSet;
- property OnInvalidDataSource: TDataSetNotifyEvent
- read fOnInvalidDataSource
- write fOnInvalidDataSource;
- property OnDestroyDataLink: TDataSetNotifyEvent
- read fOnDestroyDataLink
- write fOnDestroyDataLink;
- end;
-
- implementation
-
- constructor TComponentDataLink.Create(AComponent: TComponent);
- begin
- inherited Create;
- fComponent := AComponent;
- end;
-
- destructor TComponentDataLink.Destroy;
- begin
- if Assigned(fOnDestroyDataLink) then
- fOnDestroyDataLink(DataSet);
- inherited Destroy;
- end;
-
- function TComponentDataLink.GetDataSetName: string;
- begin
- Result := fDataSetName;
- if DataSet <> nil then
- Result := DataSet.Name;
- if DataSet is TTable then
- Result := TTable(DataSet).TableName;
- if DataSet is TQuery then
- if DataSet.DataSource <> nil then
- Result := TTable(TQuery(DataSet).DataSource.DataSet).TableName;
- end;
-
- procedure TComponentDataLink.SetDataSetName(Value: string);
- begin
- if fDataSetName <> Value then
- fDataSetName := Value;
- end;
-
- procedure TComponentDataLink.ActiveChanged;
- begin
- if Active then
- begin
- fDataSet := DataSet;
- if DataSetName <> fDataSetName then
- begin
- fDataSetName := DataSetName;
- fIndexNames := TTable(fDataSet).IndexFieldNames;
- if Assigned(fOnNewDataSet) then
- fOnNewDataSet(DataSet);
- end
- else
- begin
- fIndexNames := TTable(DataSet).IndexFieldNames;
- if Assigned(fOnDataSetOpen) then
- fOnDataSetOpen(DataSet);
- end;
- end
- else
- begin
- if DataSet = nil then
- begin
- if Assigned(fOnInvalidDataSource) then
- fOnInvalidDataSource(fDataSet);
- fDataSet := nil;
- fDataSetName := '<INVALID>';
- fIndexNames := '';
- end
- else
- begin
- if (csDestroying in DataSet.ComponentState) then
- begin
- if Assigned(fOnInvalidDataSet) then
- fOnInvalidDataSet(fDataSet);
- fDataSet := nil;
- fDataSetName := '<INVALID>';
- fIndexNames := '';
- end
- else
- begin
- if Assigned(fOnDataSetClose) then
- fOnDataSetClose(DataSet);
- if DataSet <> nil then
- begin
- fDataSetName := DataSetName;
- fIndexNames := TTable(DataSet).IndexFieldNames;
- end;
- end;
- end;
- end;
- end;
-
- procedure TComponentDataLink.CheckBrowseMode;
- begin
-
- end;
-
- procedure TComponentDataLink.DataSetChanged;
- begin
- if TTable(DataSet).IndexFieldNames <> fIndexNames then
- begin
- fIndexNames := TTable(DataSet).IndexFieldNames;
- if Assigned(fOnIndexChange) then
- fOnIndexChange(DataSet);
- end
- else
- if Assigned(fOnDataSetChange) then
- fOnDataSetChange(DataSet);
- end;
-
- procedure TComponentDataLink.DataSetScrolled(Distance: Integer);
- begin
-
- end;
-
- procedure TComponentDataLink.FocusControl(Field: TFieldRef);
- begin
-
- end;
-
- procedure TComponentDataLink.EditingChanged;
- begin
-
- end;
-
- procedure TComponentDataLink.LayoutChanged;
- begin
- if Assigned(fOnLayoutChange) then
- fOnLayoutChange(DataSet);
- end;
-
- procedure TComponentDataLink.RecordChanged(Field: TField);
- begin
-
- end;
-
- procedure TComponentDataLink.UpdateData;
- begin
-
- end;
-
- end.
-